package leetcode.LinkedList;

import java.util.HashMap;
import java.util.Map;

/**
 * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。
 * @author wangmaolin1
 * @date 2021/12/11 下午11:01
 */
public class _03无重复字符的最长子串 {

    /**
     * 关键点：滑动窗口思路 https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/hua-dong-chuang-kou-by-powcai/
     * 相关题目： 30 76 159 209 340 567 632 727
     * @param s
     * @return
     */
    public static int lengthOfLongestSubstring(String s) {
        if (s==null||s.length()==0){
            return 0;
        }
        Map<Character,Integer> map=new HashMap<>(s.length());
        int left=0;
        int max=0;
        for (int i = 0; i < s.length(); i++) {
            if (map.containsKey(s.charAt(i))){
                left= Math.max(left,map.get(s.charAt(i))+1);
            }
            map.put(s.charAt(i),i);
            max = Math.max(max, i-left+1);
        }
        return max;
    }

    public static void main(String[] args) {
        System.out.println(lengthOfLongestSubstring("abcbacabb"));
    }

}
